package cn.itsource.readerwriter;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import cn.itsource.util.IoUtil;

public class ReaderAndWriter {

	public static void main(String[] args) {
		//调用方法测试
		copyFile("inputsteam.txt", "copyFile2.txt");
		//调用方法测试
//		copyFile("test.jfif", "copyFile2.jfif");//复制非文本相关文件，会出现问题
		
	}
	
	/**
	 * 设计一个方法，复制一个文本	文件
	 * @param srcFileName	原文件名
	 * @param destFileName  新文件名
	 */
	public static void copyFile(String srcFileName,String destFileName) {
		if (srcFileName == null || destFileName == null) {
			throw new IllegalArgumentException("文件名不能为null");
		}
		
		FileReader fr = null;
		FileWriter fw = null;
		try {
			fr = new FileReader(srcFileName);
			fw = new FileWriter(destFileName);
			
			char[] c = new char[1024];//这里不是1k	每次读取的数据装到该char数组
			int read = -1;//每一次真正读取的字符个数
			//复制文件，应该一边读取，一边直接写出
			while ((read = fr.read(c)) != -1) {
				//将读取char数组中的数据，写出去。读了多少个字符就写出多少个字符
				fw.write(c, 0, read);
			}
			fw.flush();//刷新，将内存中的数据写出到硬盘
			System.out.println("复制成功！");
		} catch (FileNotFoundException e) {
			System.out.println("文件未找到！");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("复制失败！");
			e.printStackTrace();
		} finally {
			//必须是先开后关，为了保证关流成功性，将后面关闭的流写在前面关流的finally中且，前面关流先try再if判断是否非null
			//因为关流是每一个流操作必须的，所有将关流抽取为一个方法
			IoUtil.closeIo(fr,fw);
		}
	}

}
